﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YServer
{
    public class LengthDEncode
    {
        /// <summary>
        /// 长度解码委托（用于处理粘包）
        /// </summary>
        public static byte[] LengthDe(ref List<byte> cache) {

            //数据不足4字节返回(下面需要一个整形数据来判断数据长度)
            if (cache.Count < 4) { return null; }


            //创建字节流对象
            ByteArray  ba= new ByteArray(cache.ToArray());
            //读取一整形数据，得到字节数据长度（不包括包头）
            int length;
            ba.read(out length);
            //如果长度不足，返回
            if (length > ba.Length - ba.Position) { return null; }
            else { //否则读取数据
                byte[] date = new byte[length];
                ba.read(out date, date.Length);

                //清空cache 并将剩余字节填入
                cache.Clear();

                byte[] buffer = new byte[ba.Length - ba.Position];
                ba.read(out buffer, buffer.Length);
                cache.AddRange(buffer);

                //关闭字节数组流
                ba.Close();

                return date;
            }
        }

        /// <summary>
        /// 长度编码委托
        /// </summary>
        public static byte[] LengthEn(byte[] cache) {
            ByteArray ba = new ByteArray();
            ba.write(cache.Length);
            ba.write(cache);

            byte[] date = new byte[ba.Length];
            date = ba.GetBuffer();

            ba.Close();

            return date;
        }

    }
}
